﻿using System;
using System.Collections.Generic;
using System.Dto;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace System.IBLL
{
    public interface IParkingManager
    {
        /// <summary>
        /// 动态返回所需要的车位信息
        /// </summary>
        /// <param name="limit">条数</param>
        /// <param name="page">页数</param>
        /// <param name="datalet">数据总长度</param>
        /// <param name="Id">车位编号筛选器</param>
        /// <param name="parkinglLocation">车位位置筛选器</param>
        /// <returns></returns>
        List<ParkingLotListDto> GetparkingLotListDtos(int limit, int page, out int datalet, string Id, string parkinglLocation);
        /// <summary>
        /// 返回所有车位ID和车位编号
        /// </summary>
        /// <returns></returns>
        List<ParkingLotListDto> GetParkingSpaceNumberLists();
        /// <summary>
        /// 添加一条车位信息
        /// </summary>
        /// <param name="dto">数据模型</param>
        /// <returns></returns>
        Task AddOneParkingPlace(ParkingLotListDto dto);
        /// <summary>
        /// 通过车位ID删除一条车位信息
        /// </summary>
        /// <param name="id">车位ID</param>
        /// <returns></returns>
        Task DelOneParkingPlaceById(int id);
        /// <summary>
        /// 通过车位ID获取到对应的车位信息
        /// </summary>
        /// <param name="id">车位ID</param>
        /// <returns></returns>
        ParkingLotListDto GetOneParkingPlaceById(int id);
        /// <summary>
        /// 修改一条车位信息
        /// </summary>
        /// <param name="dto">数据模型</param>
        /// <returns></returns>
        Task EditOneParkingPlaceByDto(ParkingLotListDto dto);
        /// <summary>
        /// 动态返回所需要的车位销售信息
        /// </summary>
        /// <param name="limit">条数</param>
        /// <param name="page">页数</param>
        /// <param name="datalet">数据总长度</param>
        /// <param name="Id">车位ID</param>
        /// <param name="parkinglLocation">车位位置</param>
        /// <param name="salesNature">销售性质</param>
        /// <returns></returns>
        List<GetRentInfoListDto> getRentInfoListDtos(int limit, int page, out int datalet, string Id, string parkinglLocation, string salesNature);
        /// <summary>
        /// 通过数据模型添加一条车位销售信息
        /// </summary>
        /// <param name="dto">数据模型</param>
        /// <returns></returns>
        Task AddOneRentInfoByModel(GetRentInfoListDto dto);
        /// <summary>
        /// 通过车位销售ID删除车位销售信息
        /// </summary>
        /// <param name="id">车位ID</param>
        /// <returns></returns>
        Task DelOneRentInfoById(int id);
        /// <summary>
        /// 通过车位销售ID获取到车位销售信息
        /// </summary>
        /// <param name="id">数据模型</param>
        /// <returns></returns>
        GetRentInfoListDto GetOneRentInfoById(int id);
        /// <summary>
        /// 通过Dto修改对应的车位销售信息
        /// </summary>
        /// <param name="dto">数据模型</param>
        /// <returns></returns>
        Task EditOneRentInfoByDto(GetRentInfoListDto dto);
        /// <summary>
        /// 动态获取监控信息表的数据
        /// </summary>
        /// <param name="limit">条数</param>
        /// <param name="page">页数</param>
        /// <param name="datalet">数据总长度</param>
        /// <param name="monitorName">监控器名</param>
        /// <param name="monitoringArea">监控区域</param>
        /// <returns></returns>
        List<GetMonitoringListDto> getMonitoringListDtos(int limit, int page, out int datalet, string monitorName, string monitoringArea);
        /// <summary>
        /// 添加一条监控器信息
        /// </summary>
        /// <param name="dto">数据模型</param>
        /// <returns></returns>
        Task AddNewOneMonitoringInfo(GetMonitoringListDto dto);
        /// <summary>
        /// 通过监控器信息ID删除监控器信息
        /// </summary>
        /// <param name="id">监控器ID</param>
        /// <returns></returns>
        Task DelMonitoringInfoById(int id);
        /// <summary>
        /// 通过监控器ID获取到对应的监控器信息
        /// </summary>
        /// <param name="id">监控器ID</param>
        /// <returns></returns>
        GetMonitoringListDto getOneMonitoringById(int id);
        /// <summary>
        /// 通过数据模型修改对应的监控器信息
        /// </summary>
        /// <param name="dto">数据模型</param>
        /// <returns></returns>
        Task EditOneMonitoringByDto(GetMonitoringListDto dto);

        /// <summary>
        /// 获取到视频存放区列表信息
        /// </summary>
        /// <returns></returns>
        List<VideoDepositToSurveillanceVideoDto> getVideoDepositLists();
        /// <summary>
        /// 获取到视频信息表的信息以及其存放地的名称，路径，联合返回
        /// </summary>
        /// <param name="limit">条数</param>
        /// <param name="page">页数</param>
        /// <param name="datalet">总条数</param>
        /// <param name="videoName">视频名称</param>
        /// <param name="depositId">存放区ID</param>
        /// <returns></returns>
        List<VideoDepositToSurveillanceVideoDto> GetVideoDepositToSurveillanceVideoLists(int limit, int page, out int datalet, string videoName, string depositId);
        /// <summary>
        /// 添加一条存放地信息并在相对于的路劲上添加文件夹
        /// </summary>
        /// <param name="dto">数据模型</param>
        /// <returns></returns>
        Task AddNewOneVideoDeposit(VideoDepositToSurveillanceVideoDto dto);
        /// <summary>
        /// 通过视频信息ID获取到一条视频信息
        /// </summary>
        /// <param name="id">视频信息ID</param>
        /// <returns></returns>
        VideoDepositToSurveillanceVideoDto GetVideoDepositToSurveillance(int id);
        /// <summary>
        /// 通过数据模型修改一条视频信息数据
        /// </summary>
        /// <param name="dto">数据模型</param>
        /// <returns></returns>
        Task EditOneSurveillanceVideoByDto(VideoDepositToSurveillanceVideoDto dto);
        /// <summary>
        /// 通过视频信息ID删除一条视频信息
        /// </summary>
        /// <param name="id">视频信息ID</param>
        /// <returns></returns>
        Task DelOneSurveillanceVideoById(int id);
    }
}
